TITLE Impressao das iniciais de um nome em uma moldura

.MODEL SMALL
.STACK 100h

.DATA
CR       EQU 0Dh
LF       EQU 0Ah
INICIAIS DB  ?
MENSAGEM DB  'Digite as iniciais de seu nome (encerre com [ENTER]): $'

.CODE
MAIN PROC

MOV AX,@DATA
MOV DS,AX

LEA DX,MENSAGEM
MOV AH,09h
INT 21h

MOV BX,OFFSET INICIAIS

MOV CX,0h

MOV AH,01h

CAPTURA_CARACTERES:
    INT 21h
    MOV [BX],AL    
    INC BX
    INC CX
    CMP AL,CR
    JNE CAPTURA_CARACTERES
    DEC BX
    DEC CX
    MOV [BX],24h ; Hexa do caracter '$' - fim de String

CALL LINHA_ASTERISTICOS

CALL OUTRAS_LINHAS
CALL OUTRAS_LINHAS
CALL OUTRAS_LINHAS
CALL OUTRAS_LINHAS

CALL SALTA_LINHA
MOV DL,'*'
INT 21h

LEA DX,INICIAIS
MOV AH,09h
INT 21h

MOV AH,02h
MOV DL,'*'
INT 21h

CALL OUTRAS_LINHAS
CALL OUTRAS_LINHAS
CALL OUTRAS_LINHAS
CALL OUTRAS_LINHAS

CALL LINHA_ASTERISTICOS

MOV AH,4Ch
INT 21h

SALTA_LINHA PROC
    MOV DL,CR
    INT 21h
    MOV DL,LF
    INT 21h    
    RET
SALTA_LINHA ENDP

LINHA_ASTERISTICOS PROC
    PUSH CX
    MOV AH,02h
    CALL SALTA_LINHA
    MOV DL,'*'
    LOOP_ASTERISTICOS:
        INT 21h
        LOOP LOOP_ASTERISTICOS    
    INT 21h    
    POP CX
    RET
LINHA_ASTERISTICOS ENDP

OUTRAS_LINHAS PROC
    PUSH CX
    MOV AH,02h
    CALL SALTA_LINHA
    MOV DL,'*'
    INT 21h
    MOV DL,' '
    LOOP_ESPACOS_EM_BRANCO:
        INT 21h
        LOOP LOOP_ESPACOS_EM_BRANCO
    MOV DL,'*'
    INT 21h
    POP CX
    RET
OUTRAS_LINHAS ENDP

MAIN ENDP
    END MAIN